#ifndef NETWORK_H
#define NETWORK_H 

#include<Arduino.h>
#include <WiFi.h>
#include "filesystem.h"
#include "../logger.h"
#include "../globals.hpp"
#define UMEKO_FS SPIFFS

// 读取WiFi名称和密码并尝试连接WiFi
bool wifi_initalize_from_file(){
  static String ssid;
  static String password;
  if (UMEKO_FS.exists("/wifi.txt")) {
    logln("[FS] wifi.txt文件存在");
    fs::File wifiFile = UMEKO_FS.open("/wifi.txt", "r");
    ssid = wifiFile.readStringUntil('\n');
    password = wifiFile.readStringUntil('\n');
    ssid.trim();
    password.trim();
    wifiFile.close();
    WiFi.begin(ssid.c_str(), password.c_str());    // 连接WiFi网络
    logf("[NETWORK] 正在连接WiFi \"%s\" 密码 \"%s\"\n", ssid.c_str(), password.c_str());
    unsigned long startAttemptTime = millis(); // 记录开始尝试连接的时间
    while (millis() - startAttemptTime < 3000) { // 等待WiFi连接成功或超时
      if (WiFi.status() != WL_CONNECTED){
        logf("[NETWORK] 正在连接WiFi \"%s\" 密码 \"%s\"\n", ssid.c_str(), password.c_str());
        delay(1000);
      } else {
        logln("[NETWORK] WiFi连接成功");
        global_ssid = ssid.c_str();
        global_password = password.c_str();
        return true;
      }
    }
    logln("[NETWORK] WiFi overtime");
    return false;
  } else {
    logln("[FS] wifi.txt not exist");
    return false;
  }
}

void wifi_save_to_file(const char* newSSID, const char* newPassword){
    if (!newSSID || !newPassword) {
        logln("[FS] SSID或密码为空 无法保存");
        return;
    }
    fs::File wifiFile = UMEKO_FS.open("/wifi.txt", "w");
    if (!wifiFile) {
        logln("[FS] 无法打开wifi.txt文件进行写入");
        return;
    }
    wifiFile.println(newSSID);
    wifiFile.println(newPassword);
    wifiFile.close();
    global_ssid = strdup(newSSID); // 更新全局SSID
    global_password = strdup(newPassword); // 更新全局密码
    Serial.printf("[FS] WiFi信息已保存: SSID: %s, 密码: %s\n", global_ssid, global_password);
}

// 查询wifi.txt中的内容
void wifi_query() {
    if (WiFi.status() == WL_CONNECTED){
        long rssi = WiFi.RSSI(); 
        logf("[NETWORK] WiFi Signal Strength (RSSI): %d dbm", rssi); 
    }else{
        logln("[NETWORK] WiFi未连接");
    }
}

// 删除wifi.txt文件
void wifi_reset_file() {
    if (UMEKO_FS.exists("/wifi.txt")) {
        UMEKO_FS.remove("/wifi.txt");
        logln("[FS] wifi.txt文件已删除");
    } else {
        logln("[FS] wifi.txt文件不存在");
    }
}

void wifi_cli(String subcmd){
    
}


#endif